上一篇講解了一些在版本上面的操作筆記,這篇將會寫下一些自己蠻常使用的一些 git
小技巧~
stash
當手邊的工作或者目前的功能,開發到一半的時候,忽然想要去其他 branch 看看,或者想要回去過去某個 commit(版本)查查資料,這時打下 git checkout {分枝\commit}
的時候,git
會請你先做一個 commit ,將手邊的這些新增都先存成一個版本。
這時你會想,也是啦,的確要將現在 untracked file 的先變成一個版本,才能跳到其他版本。於是就先"隨意"的做了一個 commit ,commit message 還可能亂打("tmp?" , "aaa?" )之類的,反正只是要存起來而已,之後回來再 git reset --soft
將這個 commit 給清掉,並且把原本那些功能打回去 untrack 區域。
git stash
的,就是把目前的修改的 untrack 部分,放到一個暫存區,之後 working area 就清空的,就可以安心地跳到其他的版本,當回來的時候,再使用 git stash pop
,那些暫存的東西就又會回到上次修改的樣子囉!git add & git commit
),我自己蠻喜歡用的,如果要查看目前的 stash
有哪些,也可以輸入 git stash list
來做查看唷!-- -amend
使用這個情況在於,我剛下完一個自認為很完美的 commit,忽然發現有一行程式碼寫錯了!但我又不想要再寫一個 commit 叫做 "Fix the bug" 只為了改一兩個字,這樣又多加一個版本,感覺不太好,有辦法把這次的修改並到最後一次的那個完整 commit 嗎?
可以的,使用 git commit --amend
,可以把該次的修改,直接融合回去最新的那一次 commit,這樣的優點就是不會出現太多太碎的版本出來!
rebase -i
老實講,我自己 rebase 的時候有時也會搞到花掉,我只能提供我會拿來用的部分,其實還有很多可以使用到的唷!
rebase 基本上是用來改過去歷史的,有時候改不好,可是會出大事的!
git rebase -i HEAD~?
去選取過去 ? 個 commit message(從 HEAD 為第一個開始算),假設我想選取過去 4 個,那畫面會如下vim
去把想要更動的那個 commit 前面的 "pick" 砍掉,要改訊息就改成 r,想要砍掉訊息就改成 d,想要把多個 commit 融合成一個就參考 squash
(自己不太熟),以此類推。git push
上去,有時必須使用 git push -f
去逼迫大家接受你新的過去,這是一件很危險的事!在下 git push -f
這個指令時,請務必知道你自己在幹嘛,也讓你的合作夥伴知道這件事情!